home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / tools / cv_set6 / cv_set6s.lzh / RGB2BMP.S < prev    next >
Text File  |  1997-09-12  |  31KB  |  1,382 lines

  1. *********************************************************************************
  2. *    RGB to BMP converter                <RGB2BMP.X Ver0.01>    *
  3. *********************************************************************************
  4.  
  5.     .include    doscall.mac
  6.     .include    iocscall.mac
  7.     .include    myconst.h
  8.  
  9. file_header:
  10. f_type:        equ    0        *ファイル識別子 'BM'
  11. f_size:        equ    2        *ファイルのサイズ
  12. f_reserved1:    equ    6        *予備1
  13. f_reserved2:    equ    8        *予備2
  14. f_offbits:    equ    10        *ファイル先頭からイメージデータへのオフセット
  15.  
  16. WIN3_HED:
  17. win3_size:    equ    14        *これ大きさ (12:OS/2 1.x,40:Windows3.x,64:OS/2 2.x)
  18. win3_width:    equ    18        *横サイズ
  19. win3_height:    equ    22        *縦サイズ
  20. win3_planes:    equ    26        *使用プレーン数
  21. win3_bitcount:    equ    28        *色数 (1:2色,4:16色,8:256色,24:16777216色)
  22. win3_comp:    equ    30        *圧縮アルゴリズム (0:無圧縮,1:RLE8,2:RLE4)
  23. win3_size_image    equ    34        *イメージデータのサイズ
  24. win3_xpels_pm:    equ    38        *X方向のディスプレイ分解能
  25. win3_ypels_pm:    equ    42        *Y方向のディスプレイ分解能
  26. win3_clr_used:    equ    46        *色変換テーブルの大きさ
  27. win3_clr_imp:    equ    50        *重要な色の数
  28.  
  29.     .text
  30.     .even
  31.  
  32. start:
  33.     lea.l    mysp(pc),sp        *スタックセット
  34.     lea.l    work(pc),a6
  35.  
  36.     lea.l    16(a0),a0        *余分なメモリ開放
  37.     suba.l    a0,a1
  38.     move.l    a1,-(sp)
  39.     move.l    a0,-(sp)
  40.     DOS    _SETBLOCK
  41.     addq.l    #8,sp
  42.  
  43.     bsr    cmdchk            *コマンドラインの解析
  44.     bsr    s_name_chk        *セーブファイル名のチェック
  45.     bsr    buf_get            *バッファ確保
  46.     bsr    name_get        *ファイル名を取得し処理する
  47.     bsr    buf_free        *バッファ開放
  48.     bsr    exit            *終了処理
  49.     DOS    _EXIT
  50.  
  51. *****************************************************************
  52. *    ファイル名を取得し、ファイルの読み込みを行う        *
  53. *****************************************************************
  54. name_get:
  55.     clr.w    file_cnt(a6)        *ファイル数のカウント初期化
  56.  
  57.     bsr    chkname            *ファイル名に対する前処理
  58.     bsr    chkext            *拡張子が省略されているかチェック
  59.  
  60.     move.w    #ARCHIVE,-(sp)        *最初のファイルを検索する
  61.     pea.l    arg1(a6)        *
  62.     pea.l    filbuf(a6)        *
  63.     DOS    _FILES            *
  64.     lea.l    10(sp),sp        *
  65.  
  66. loop:
  67.     tst.l    d0            *ファイルは見つかったか?
  68.     bmi    done            * 見つからなければ処理完了
  69.  
  70.     bsr    setpath            *得られたファイル名を
  71.                     * フルパスに再構成する
  72.  
  73.     bsr    main            *メイン処理
  74.  
  75.     pea.l    filbuf(a6)        *つぎのファイルを検索する
  76.     DOS    _NFILES            *
  77.     addq.l    #4,sp            *
  78.  
  79.     bra    loop            *繰り返す
  80.  
  81. done:
  82.     bsr    file_cnt_chk        *処理したファイル数のチェック
  83.     rts
  84.  
  85. *****************************************************************
  86. *    files実行に先立ってファイル名に前処理を加える        *
  87. *****************************************************************
  88. chkname:
  89.     pea.l    nambuf(a6)        *ファイル名を展開する
  90.     pea.l    arg1(a6)        *
  91.     DOS    _NAMECK            *
  92.     addq.l    #8,sp            *
  93.  
  94.     tst.l    d0            *d0<0なら
  95.     bmi    name_er            * ファイル名の指定に誤りがある
  96.  
  97.     beq    nowild            *d0=0ならワイルドカード指定なし
  98.  
  99.     cmpi.w    #$00ff,d0        *d0≠FFHなら
  100.     bne    wild            * ワイルドカード指定あり
  101.  
  102. noname:                    *ファイル名が指定されていない場合
  103.     lea.l    arg1(a6),a0        *バッファargに
  104.     lea.l    nambuf(a6),a1        * nameckで展開したパス名+'*.GLX'
  105.     bsr    strcpy            * を再構成する
  106.     lea.l    kome0(pc),a1        *
  107.     bsr    strcpy            *
  108.  
  109. wild:                    *ワイルドカードが指定された場合
  110.                     *何もしなくてよい
  111. cknam0:
  112.     rts
  113.  
  114. nowild:                    *ワイルドカードが指定されていない場合
  115.     move.w    #SUBDIR,-(sp)        *サブディレクトリであると仮定して
  116.     pea.l    arg1(a6)        * 検索してみる
  117.     pea.l    filbuf(a6)        *
  118.     DOS    _FILES            *
  119.     lea.l    10(sp),sp        *
  120.     
  121.     tst.l    d0            *見つかったか?
  122.     bmi    cknam0            * 見つからなければファイルだろう
  123.  
  124.     lea.l    arg1(a6),a0        *バッファarg1に
  125.     lea.l    komekome(pc),a1        * もとのファイル名+'\*.GLX'
  126.     bsr    strcat            * を再構成する
  127.  
  128.     bra    chkname            *nameckでファイル名を展開するために
  129.                     * サブルーチン先頭に戻る
  130.  
  131. *****************************************************************
  132. *    出力パス名をチェックする                *
  133. *****************************************************************
  134. s_name_chk:
  135.     lea.l    arg2(a6),a0        *出力パス名を指定したか?
  136.     tst.b    (a0)
  137.     beq    s_name_chk8        *してない
  138.  
  139.     pea.l    nambuf(a6)        *ファイル名を展開する
  140.     pea.l    arg2(a6)        *
  141.     DOS    _NAMECK            *
  142.     addq.l    #8,sp            *
  143.  
  144.     tst.l    d0            *d0<0なら
  145.     bmi    out_name_err        * パス名の指定に誤りがある
  146.  
  147.     beq    s_name_chk1        *d0=0ならワイルドカード指定なし
  148.  
  149.     cmpi.w    #$00ff,d0        *d0≠FFHなら
  150.     bne    out_name_err        * ワイルドカード指定あり
  151.  
  152. s_name_chk1:
  153.     lea.l    arg2(a6),a0        *ドライブ名を指定しているか?
  154.     cmp.b    #':',1(a0)
  155.     bne    out_name_err        *ドライブ名の指定に誤りがある
  156.  
  157.     tst.b    2(a0)            *ドライブ名のみか
  158.     bne    s_name_chk2        *違う
  159.     addq.l    #2,a0
  160.     bra    s_name_chk9
  161.  
  162. s_name_chk2:
  163.     moveq.l    #0,d0            *セーブ先ドライブ番号を求める
  164.     move.b    (a0),d0
  165.     bsr    toupper
  166.     sub.b    #'A',d0
  167.     add.b    #1,d0
  168.  
  169.     lea.l    spathbuf(a6),a1        *セーブ先ドライブ名
  170.     move.b    (a0),(a1)+
  171.     move.b    #':',(a1)+
  172.     move.b    #'\',(a1)+
  173.  
  174.     move.l    a1,-(sp)        *セーブ先パスをセーブ
  175.     move.w    d0,-(sp)
  176.     DOS    _CURDIR
  177.     addq.l    #6,sp
  178.  
  179.     lea.l    cpathbuf(a6),a2        *カレントパスをセーブしておく
  180.     DOS    _CURDRV
  181.     add.b    #"A",d0
  182.     move.b    d0,(a2)+
  183.     move.b    #':',(a2)+
  184.     move.b    #'\',(a2)+
  185.  
  186.     move.l    a2,-(sp)
  187.     move.w    #0,-(sp)
  188.     DOS    _CURDIR
  189.     addq.l    #6,sp
  190.  
  191.     pea.l    arg2(a6)        *コマンドラインで指定されたパスへ
  192.     DOS    _CHDIR            * 移動してみる
  193.     addq.l    #4,sp
  194.  
  195.     tst.l    d0            *d0が0でなければ
  196.     bmi    out_name_err        * パス名の指定に誤りがある
  197.  
  198.     pea.l    spathbuf(a6)        *セーブ先パスを戻す
  199.     DOS    _CHDIR
  200.     addq.l    #4,sp
  201.  
  202.     pea.l    cpathbuf(a6)        *カレントパスに戻す
  203.     DOS    _CHDIR
  204.     addq.l    #4,sp
  205.  
  206.     lea.l    arg2(a6),a0        *
  207.     bsr    set_en            *パス名の最後に\マークをセット
  208.     bra    s_name_chk9
  209.  
  210. s_name_chk8:
  211.     lea.l    arg2(a6),a0
  212.  
  213. s_name_chk9:
  214.     move.l    a0,nameichi(a6)
  215.     rts
  216.  
  217. *****************************************************************
  218. *    パス名に¥マークを連結する                *
  219. *****************************************************************
  220. set_en:
  221.     tst.b    (a0)+            *(a0)は0か?
  222.     bne    set_en            *そうでなければ繰り返す
  223.     subq.l    #1,a0            *行きすぎたから1つ戻る
  224.  
  225.     cmp.b    #"\",-1(a0)        *一番最後の文字が¥か
  226.     beq    set_en_            * ¥ならばスキップ
  227.     move.b    #'\',(a0)+        * ¥をセット
  228. set_en_:
  229.     rts
  230.  
  231. *****************************************************************
  232. *    files,nfilesで見付けたファイル名をフルパスに構成し直し    *
  233. *        arg1以降に格納する                *
  234. *****************************************************************
  235. setpath:
  236.     lea.l    arg1(a6),a0        *a0=コピー先
  237.     lea.l    nambuf(a6),a1        *a1=nameckで展開したパス名
  238.     bsr    strcpy            *コピーする
  239.     lea.l    filbuf(a6),a1        *a1=files,nfilesで見付けたファイル名
  240.     lea.l    30(a1),a1
  241.     bsr    strcpy            *連結する
  242.     rts
  243.  
  244. *****************************************************************
  245. *    文字列の連結および複写                    *
  246. *    リターン時a0は文字列末の00Hを指す            *
  247. *****************************************************************
  248. strcat:
  249.     tst.b    (a0)+            *(a0)は0か?
  250.     bne    strcat            *そうでなければ繰り返す
  251.     subq.l    #1,a0            *行きすぎたから1つ戻る
  252. strcpy:
  253.     move.b    (a1)+,(a0)+        *1文字ずつ
  254.     bne    strcpy            *終了コードまでを転送する
  255.     subq.l    #1,a0            *a0は進み過ぎている
  256.                     *a0は文字列末の00Hを指す
  257.     rts
  258.  
  259. *****************************************************************
  260. *    拡張子を補う                        *
  261. *****************************************************************
  262. chkext:
  263.     lea.l    arg1(a6),a0        *ファイル名のアドレス
  264.     lea.l    dext(pc),a1        *拡張子のアドレス
  265. chkext0:
  266.     cmp.b    #".",(a0)        *拡張子があるか
  267.     beq    chkext2
  268.     tst.b    (a0)+            *(a0)は0か?
  269.     bne    chkext0            *そうでなければ繰り返す
  270.     subq.l    #1,a0            *行きすぎたから1つ戻る
  271. chkext1:
  272.     move.b    (a1)+,(a0)+        *1文字転送
  273.     bne    chkext1            *終了コードまで繰り返す
  274. chkext2:
  275.     rts
  276.  
  277. *****************************************************************
  278. *    コマンドラインのチェックを行う                *
  279. *****************************************************************
  280. cmdchk:
  281.     lea.l    arg1(a6),a0        *a0=引数切り出し領域
  282.     clr.b    256(a0)            *出力ファイル名をちょっと初期化
  283.     addq.l    #1,a2            *a2=コマンドライン文字列先頭
  284.     sf    sflg(a6)        *SスイッチOFF
  285.  
  286. cmdchk0:
  287.     bsr    switch_chk        *スイッチのチェック
  288.  
  289.     tst.b    (a2)            *引数があるか?
  290.     beq    usage            *ないならファイル名が足りない
  291.     bsr    getarg            *ファイル名切り出し
  292.     lea.l    256(a0),a0        *a0=a0+256
  293.     bsr    switch_chk        *さらにスイッチのチェック
  294.     bsr    getarg            *ファイル名切り出し
  295.     bsr    switch_chk        *さらにスイッチのチェック
  296.     tst.b    (a2)            *引数があるか?
  297.     bne    usage            * あるなら引数が多い
  298. cmdchk1:
  299.     rts
  300.  
  301. *****************************************************************
  302. *    スペースを飛ばしつぎの引数先頭までポインタを進め    *
  303. *    スイッチがあれば処理してしまう                *
  304. *****************************************************************
  305. switch_chk:
  306.     bsr    skipsp            *スペースをスキップする
  307.     tst.b    (a2)            *まだスイッチがあるか?
  308.     beq    switch_chk2        *ないなら戻る(処理の振り分けを行う)
  309.  
  310.     cmpi.b    #'/',(a2)        *引数の先頭が
  311.     beq    switch_chk1        */,-であれば
  312.     cmpi.b    #'-',(a2)        *  スイッチ
  313.     beq    switch_chk1        *
  314.     bra    switch_chk2        *スイッチでないなら戻る
  315.  
  316. switch_chk1:
  317.     addq.l    #1,a2            *'/'や'-'の分ポインタを進める
  318.     tst.b    (a2)            *スイッチがあるか?
  319.     beq    usage            * ないなら使用方表示
  320.     move.b    (a2)+,d0        *1文字取り出す
  321.     bsr    toupper            *大文字に変換しておく
  322.  
  323.     cmpi.b    #'S',d0
  324.     beq    ssw
  325.     bra    usage
  326.  
  327. ssw:
  328.     tst.b    sflg(a6)
  329.     bne    usage
  330.     st    sflg(a6)
  331.     bra    switch_chk
  332.  
  333. switch_chk2:
  334.     rts
  335.  
  336. *****************************************************************
  337. *    ファイル名を切り出す                    *
  338. *****************************************************************
  339. getarg:
  340.     move.l    a0,-(sp)        *{レジスタ待避
  341. gtarg0:    tst.b    (a2)            *1)文字列の終端コードか
  342.     beq    gtarg1            *
  343.     cmpi.b    #SPACE,(a2)        *2)スペースか
  344.     beq    gtarg1            *
  345.     cmpi.b    #TAB,(a2)        *3)タブか
  346.     beq    gtarg1            *
  347. *    cmpi.b    #'-',(a2)        *4)ハイフンか
  348. *    beq    gtarg1            *
  349.     cmpi.b    #'/',(a2)        *5)スラッシュ
  350.     beq    gtarg1            *
  351.     move.b    (a2)+,(a0)+        * が現れるまで転送を
  352.     bra    gtarg0            * 繰り返す
  353. gtarg1:    clr.b    (a0)            *文字列終端コードを書き込む
  354.     movea.l    (sp)+,a0        *}レジスタ復帰
  355.     rts
  356.  
  357. *****************************************************************
  358. *    スペース・TABをスキップする                *
  359. *****************************************************************
  360. skipsp0:
  361.     addq.l    #1,a2
  362. skipsp:
  363.     cmpi.b    #$20,(a2)
  364.     beq    skipsp0
  365.     cmpi.b    #$09,(a2)
  366.     beq    skipsp0
  367.     rts
  368.  
  369. *****************************************************************
  370. *    小文字→大文字変換ルーチン                *
  371. *****************************************************************
  372. toupper:
  373.     cmpi.b    #'a',d0
  374.     bcs    toupr0
  375.     cmpi.b    #'z'+1,d0
  376.     bcc    toupr0
  377.     subi.b    #$20,d0
  378. toupr0:
  379.     rts
  380.  
  381. *****************************************************************
  382. *    メイン処理                        *
  383. *****************************************************************
  384. main:
  385.     clr.w    line_cnt(a6)        *ラインカウント初期化
  386.     sf    ipr_flg(a6)        *IPRあり
  387.  
  388.     bsr    ipr_check        *IPRファイルのチェック
  389.  
  390.     lea.l    arg1(a6),a0        *ファイル名セット
  391.     bsr    file_open        *ファイルオープン
  392.  
  393.     tst.b    ipr_flg(a6)        *
  394.     beq    main1
  395.  
  396.     bsr    file_size        *ファイルサイズからデフォルトサイズをチェック
  397.     move.l    d6,fi_size(a6)
  398.     bsr    def_check
  399. main1:
  400.     bsr    size_set        *画像サイズのセット
  401.  
  402.     move.w    line_byte1(a6),d0    *メモリチェック
  403.     add.w    line_byte2(a6),d0
  404.     ext.l    d0
  405.     cmp.l    buff_size(a6),d0
  406.     bhi    main9
  407.  
  408.     bsr    convert            *コンバート
  409.  
  410.     move.w    in_file(a6),-(sp)    *ファイルCLOSE
  411.     DOS    _CLOSE
  412.     addq.l    #2,sp
  413.  
  414.     addq.w    #1,file_cnt(a6)
  415.     rts
  416.  
  417. main9:
  418.     move.w    in_file(a6),-(sp)    *メモリが全然足りない(;_;
  419.     DOS    _CLOSE
  420.     addq.l    #2,sp
  421.     bra    no_buff
  422.  
  423. *****************************************************************
  424. *    IPRファイルの読み込み                    *
  425. *****************************************************************
  426. ipr_check:
  427.     bsr    ipr_name_set        *IPRファイル名作成
  428.  
  429.     move.w    #0,-(sp)        *ファイルopen
  430.     pea.l    arg3(a6)
  431.     DOS    _OPEN
  432.     addq.l    #6,sp
  433.     tst.l    d0
  434.     bmi    ipr_check1
  435.     move.w    d0,in_file(a6)
  436.  
  437.     bsr    file_size
  438.     movea.l    buff_addr(a6),a5
  439.     bsr    file_read
  440.     move.w    in_file(a6),-(sp)
  441.     DOS    _CLOSE
  442.     addq.l    #2,sp
  443.  
  444.     movea.l    buff_addr(a6),a0
  445.     bsr    ipr_check5
  446.     move.w    d0,yoko(a6)
  447.     bsr    ipr_check5
  448.     move.w    d0,tate(a6)
  449.     rts
  450.  
  451. ipr_check1:
  452.     st    ipr_flg(a6)            *IPRなし
  453.     rts
  454.  
  455.  
  456. ipr_check5:
  457.     moveq.l    #0,d0
  458.     moveq.l    #0,d1
  459. ipr_check6:
  460.     cmp.b    #' ',(a0)+
  461.     beq    ipr_check6
  462.     subq.l    #1,a0
  463. ipr_check7:
  464.     move.b    (a0)+,d1
  465.     cmp.b    #' ',d1
  466.     beq    ipr_check8
  467.     sub.b    #'0',d1
  468.     mulu    #10,d0
  469.     add.w    d1,d0
  470.     bra    ipr_check7
  471. ipr_check8:
  472.     subq.l    #1,a0
  473.     rts
  474.  
  475. *****************************************************************
  476. *    画像サイズセット                    *
  477. *****************************************************************
  478. size_set:
  479.     move.w    yoko(a6),d0        *1ラインのバイト数(読み込み側)
  480.     move.w    d0,d1
  481.     add.w    d1,d1
  482.     add.w    d1,d0
  483.     move.w    d0,line_byte1(a6)
  484.  
  485. *    move.w    yoko(a6),d0        *1ラインのバイト数(書き込み側)
  486. *    move.w    d0,d1
  487. *    add.w    d1,d1
  488. *    add.w    d1,d0
  489.     addq.w    #3,d0
  490.     and.w    #$fffc,d0
  491.     move.w    d0,line_byte2(a6)
  492.  
  493.     rts
  494.  
  495. *****************************************************************
  496. *    デフォルトサイズをチェック                *
  497. *****************************************************************
  498. def_check:
  499.     lea.l    size_table(pc),a0
  500.     move.l    fi_size(a6),d0
  501.     bra    def_check1
  502.  
  503. def_check0:
  504.     addq.l    #4,a0
  505. def_check1:
  506.     move.l    (a0)+,d1
  507.     beq    def_check9        *テーブルになかった
  508.     cmp.l    d0,d1
  509.     bne    def_check0
  510.     move.w    (a0)+,yoko(a6)
  511.     move.w    (a0)+,tate(a6)
  512.     rts
  513.  
  514. def_check9:
  515.     move.w    in_file(a6),-(sp)
  516.     DOS    _CLOSE
  517.     addq.l    #2,sp
  518.     bra    ipr_err
  519.  
  520. *****************************************************************
  521. *    コンバート                        *
  522. *****************************************************************
  523. convert:
  524.     bsr    prt0
  525.     bsr    prt1
  526.  
  527.     bsr    save_name_set        *セーブするファイル名作成
  528.  
  529.     bsr    bmphed_set        *ヘッダ情報作成
  530.  
  531.     lea.l    arg2(a6),a0        *ヘッダ作成
  532.     bsr    file_create
  533.  
  534.     lea.l    head_buff(a6),a5    *ヘッダ書き込み
  535.     moveq.l    #54,d6
  536.     bsr    file_write
  537.  
  538.     move.w    line_byte1(a6),d0    *一回に変換できるライン数(d3)を求める
  539.     add.w    line_byte2(a6),d0
  540.     move.l    buff_size(a6),d3
  541.     divu.w    d0,d3
  542.  
  543.     cmp.w    tate(a6),d3        *一回で変換できるか
  544.     bls    convert1        *できない
  545.  
  546.     move.w    tate(a6),d3
  547.     moveq.l    #1,d4
  548.     moveq.l    #0,d5
  549.     bra    convert2
  550.  
  551. convert1:
  552.     moveq.l    #0,d5            *繰り返し数(d4)と残り(d5)を求める
  553.     move.w    tate(a6),d5
  554.     divu.w    d3,d5
  555.     move.w    d5,d4
  556.     swap    d5
  557.  
  558. convert2:
  559.     move.w    line_byte1(a6),d0    *変換先アドレスを求める
  560.     mulu.w    d3,d0
  561.     add.l    buff_addr(a6),d0
  562.     move.l    d0,gr_addr(a6)
  563.  
  564.     bsr    convert4
  565.     tst.w    d5            *半端分があるか
  566.     beq    convert3        *ない
  567.     moveq.l    #1,d4
  568.     move.w    d5,d3
  569.     bsr    convert4
  570.  
  571. convert3:
  572.     move.w    out_file(a6),-(sp)    *ファイルCLOSE
  573.     DOS    _CLOSE
  574.     addq.l    #2,sp
  575.     bsr    prt3
  576.     rts
  577.  
  578. convert4:
  579.     subq.w    #1,d4
  580. convert4_:
  581.     bsr    seek_get
  582.     bsr    file_seek
  583.  
  584.     movea.l    buff_addr(a6),a5    *読み込み
  585.     move.w    line_byte1(a6),d6    *YOKO*3*LINE
  586.     mulu.w    d3,d6
  587.     bsr    file_read
  588.  
  589.     move.w    d3,d7            *コンバート
  590.     bsr    gr_conv
  591.  
  592.     move.l    gr_addr(a6),a5        *書き込み
  593.     move.w    line_byte2(a6),d6
  594.     mulu.w    d3,d6
  595.     bsr    file_write
  596.  
  597.     dbra.w    d4,convert4_        *繰り返し
  598.     rts
  599.  
  600. seek_get:                *シーク位置(d0)計算
  601.     move.w    tate(a6),d0
  602.     move.w    line_cnt(a6),d1
  603.     add.w    d3,d1
  604.     sub.w    d1,d0
  605.     mulu.w    line_byte1(a6),d0
  606.     rts
  607.  
  608. file_seek:                *指定位置(d0)にシーク
  609.     move.w    #0,-(sp)
  610.     move.l    d0,-(sp)
  611.     move.w    in_file(a6),-(sp)
  612.     DOS    _SEEK
  613.     addq.l    #8,sp
  614.     tst.l    d0
  615.     bmi    read_err
  616.     rts
  617.  
  618. *****************************************************************
  619. *    画像変換                        *
  620. *****************************************************************
  621. gr_conv:
  622.     movem.l    d0-d7/a0-a5,-(sp)
  623.  
  624.     subq.w    #1,d7            *繰り返し数-1
  625.  
  626.     movea.l    buff_addr(a6),a0    *変換元アドレス
  627.     move.w    d7,d0
  628.     mulu.w    line_byte1(a6),d0
  629.     adda.l    d0,a0
  630.  
  631.     movea.l    gr_addr(a6),a2        *変換先アドレス
  632.  
  633.     move.w    line_byte2(a6),d0    *半端分があるか
  634.     sub.w    line_byte1(a6),d0
  635.     movea.w    d0,a5
  636.  
  637.     movea.w    line_byte1(a6),a4    *1ライン上への差分
  638.  
  639.     moveq.l    #0,d0            *ワーククリア
  640.     moveq.l    #0,d1
  641.     moveq.l    #0,d2
  642.     move.w    #%00000000_00000111,d3    *マスクデータ
  643.  
  644.     tst.b    sflg(a6)
  645.     beq    gr_conv10
  646.  
  647. gr_conv0:
  648.     bsr    prt2
  649.     movea.l    a0,a1
  650.     move.w    yoko(a6),d6
  651.     subq.w    #1,d6
  652.  
  653. gr_conv1:
  654.     move.b    (a1)+,d0        *R
  655.     beq    gr_conv2
  656.     or.w    d3,d0
  657. gr_conv2:
  658.     move.b    (a1)+,d1        *G
  659.     beq    gr_conv3
  660.     or.w    d3,d1
  661. gr_conv3:
  662.     move.b    (a1)+,d2        *B
  663.     beq    gr_conv4
  664.     or.w    d3,d2
  665. gr_conv4:
  666.     move.b    d2,(a2)+        *BGRの順で書き込む
  667.     move.b    d1,(a2)+
  668.     move.b    d0,(a2)+
  669.  
  670.     dbra.w    d6,gr_conv1
  671.     suba.l    a4,a0
  672.  
  673.     move.w    a5,d6
  674.     beq    gr_conv6
  675.     subq.w    #1,d6
  676. gr_conv5:
  677.     clr.b    (a2)+
  678.     dbra.w    d6,gr_conv5
  679.  
  680. gr_conv6:
  681.     dbra.w    d7,gr_conv0
  682.     movem.l    (sp)+,d0-d7/a0-a5
  683.     rts
  684.  
  685.  
  686. gr_conv10:
  687.     bsr    prt2
  688.     movea.l    a0,a1
  689.     move.w    yoko(a6),d6
  690.     subq.w    #1,d6
  691.  
  692. gr_conv11:
  693.     move.b    (a1)+,d0        *R
  694.     move.b    (a1)+,d1        *G
  695.     move.b    (a1)+,d2        *B
  696.  
  697.     move.b    d2,(a2)+        *B
  698.     move.b    d1,(a2)+        *G
  699.     move.b    d0,(a2)+        *R
  700.  
  701.     dbra.w    d6,gr_conv11
  702.     suba.l    a4,a0
  703.  
  704.     move.w    a5,d6
  705.     beq    gr_conv13
  706.     subq.w    #1,d6
  707. gr_conv12:
  708.     clr.b    (a2)+
  709.     dbra.w    d6,gr_conv12
  710.  
  711. gr_conv13:
  712.     dbra.w    d7,gr_conv10
  713.     movem.l    (sp)+,d0-d7/a0-a5
  714.     rts
  715.  
  716. *****************************************************************
  717. *    BMPヘッダの作成                        *
  718. *****************************************************************
  719. bmphed_set:
  720.     lea.l    head_buff(a6),a1        *バッファの先頭
  721.  
  722.     move.w    #'BM',f_type(a1)        *ファイル識別子
  723.  
  724.     move.w    tate(a6),d0            *ファイルサイズ(TATExlinebyte+54)
  725.     mulu.w    line_byte2(a6),d0
  726.     move.l    d0,d1
  727.     add.l    #54,d0
  728.     bsr    i_to_m
  729.     move.l    d0,f_size(a1)
  730.  
  731.     clr.w    f_reserved1(a1)            *予備1
  732.     clr.w    f_reserved2(a1)            *予備2
  733.  
  734.     move.l    #$36000000,f_offbits(a1)    *ファイル先頭からイメージデータへのオフセット
  735.  
  736.     move.l    #$28000000,win3_size(a1)    *ヘッダサイズ(12:OS/2 V1, 40:Win3, 64:OS/2 V2)
  737.  
  738.     move.w    yoko(a6),d0            *横サイズ
  739.     ext.l    d0
  740.     bsr    i_to_m
  741.     move.l    d0,win3_width(a1)
  742.  
  743.     move.w    tate(a6),d0            *縦サイズ
  744.     ext.l    d0
  745.     bsr    i_to_m
  746.     move.l    d0,win3_height(a1)
  747.  
  748.     move.w    #$0100,win3_planes(a1)        *使用プレーン数
  749.  
  750.     move.w    #$1800,win3_bitcount(a1)    *使用bit数(1:2色,4:16色,8:256色,24:16777216色)
  751.  
  752.     move.l    #0,win3_comp(a1)        *圧縮アルゴリズム (0:無圧縮,1:RLE8,2:RLE4)
  753.  
  754.     move.l    d1,d0                *イメージデータのサイズ
  755.     bsr    i_to_m
  756.     move.l    d0,win3_size_image(a1)
  757.  
  758. *    clr.l    win3_xpels_pm(a1)        *X方向のディスプレイ分解能
  759. *    clr.l    win3_ypels_pm(a1)        *Y方向のディスプレイ分解能
  760.     move.l    #$130B0000,win3_xpels_pm(a1)    *X方向のディスプレイ分解能
  761.     move.l    #$130B0000,win3_ypels_pm(a1)    *Y方向のディスプレイ分解能
  762.  
  763.     clr.l    win3_clr_used(a1)        *色変換テーブルの大きさ
  764.     clr.l    win3_clr_imp(a1)        *重要な色の数
  765.  
  766.     rts
  767.  
  768. i_to_m:
  769.     ror.w    #8,d0
  770.     swap.w    d0
  771.     ror.w    #8,d0
  772.     rts
  773.  
  774. *****************************************************************
  775. *    IPR名の作成                        *
  776. *****************************************************************
  777. ipr_name_set:
  778.     lea.l    arg1(a6),a1        *転送元
  779.     lea.l    arg3(a6),a0        *転送先
  780.     bsr    strcpy            *ファイル名を複写する
  781.  
  782.     lea.l    arg3(a6),a0        *拡張子を'IPR'に変更
  783.     lea.l    cext1(pc),a1
  784.     bsr    cheng_ext
  785.     rts
  786.  
  787. *****************************************************************
  788. *    セーブ名の作成                        *
  789. *****************************************************************
  790. save_name_set:
  791.     lea.l    filbuf(a6),a1        *転送元
  792.     lea.l    30(a1),a1
  793.     movea.l    nameichi(a6),a0        *転送先
  794.     bsr    strcpy            *ファイル名を複写する
  795.  
  796.     lea.l    arg2(a6),a0        *拡張子を'BMP'に変更
  797.     lea.l    cext2(pc),a1
  798.     bsr    cheng_ext
  799.     rts
  800.  
  801. *****************************************************************
  802. *    拡張子を変更する                    *
  803. *****************************************************************
  804. cheng_ext:
  805. *    lea.l    arg2(a6),a0        *ファイル名のアドレス
  806. *    lea.l    cext1(pc),a1
  807. cheng_ext0:
  808.     cmp.b    #".",(a0)+        *拡張子があるか
  809.     bne    cheng_ext0
  810.     subq.l    #1,a0            *行きすぎたから1つ戻る
  811. cheng_ext1:
  812.     move.b    (a1)+,(a0)+        *1文字転送
  813.     bne    cheng_ext1        *終了コードまで繰り返す
  814. cheng_ext2:
  815.     rts
  816.  
  817. *****************************************************************
  818. *    表示関係                        *
  819. *****************************************************************
  820. prt0:                    *表示バッファ初期化
  821.     movem.l    d0/a0,-(sp)
  822.     lea.l    prt_buff(a6),a0
  823.     moveq.l    #96-1,d0
  824. prt0_:
  825.     move.b    #SPACE,(a0)+
  826.     dbra.w    d0,prt0_
  827.     clr.b    (a0)+
  828.     movem.l    (sp)+,d0/a0
  829.     rts
  830.  
  831. prt1:                    *ファイル名とサイズ表示
  832.     movem.l    d0/a0-a1,-(sp)
  833.  
  834.     lea.l    prt_buff(a6),a0
  835.     lea.l    filbuf(a6),a1
  836.     lea.l    30(a1),a1
  837.     bsr    strcpy
  838.     move.b    #SPACE,(a0)
  839.  
  840.     lea.l    prt_buff(a6),a0        *位置合わせ
  841.     adda.l    #22,a0
  842.  
  843.     move.b    #"(",(a0)+
  844.     move.w    yoko(a6),d0
  845.     bsr    dec_set
  846.     move.b    #",",(a0)+
  847.     move.w    tate(a6),d0
  848.     bsr    dec_set
  849.     move.b    #")",(a0)+
  850.     lea.l    crlf_mes(pc),a1
  851.     bsr    strcpy
  852.     lea.l    prt_buff(a6),a0
  853.     bsr    mesput
  854.     movem.l    (sp)+,d0/a0-a1
  855.     rts
  856.  
  857. prt2:                    *変換ライン数表示
  858.     movem.l    d0-d1/a0-a1,-(sp)
  859.  
  860.     lea.l    prt_buff(a6),a0
  861.  
  862.     addq.w    #1,line_cnt(a6)
  863.     move.w    line_cnt(a6),d0
  864.     bsr    dec_set
  865.     move.b    #"/",(a0)+
  866.     move.w    tate(a6),d0
  867.     bsr    dec_set
  868.  
  869.     lea.l    henkan_mes(pc),a1
  870.     bsr    strcpy
  871.     lea.l    crlf_mes(pc),a1
  872.     bsr    strcpy
  873.  
  874.     IOCS    _B_UP_S
  875.     moveq.l    #40,d1
  876.     IOCS    _B_RIGHT
  877.     lea.l    prt_buff(a6),a0
  878.     bsr    mesput
  879.     movem.l    (sp)+,d0-d1/a0-a1
  880.     rts
  881.  
  882. prt3:                    *'終了!'表示
  883.     movem.l    d0-d1/a0-a1,-(sp)
  884.     lea.l    prt_buff(a6),a0
  885.     lea.l    syuryo_mes(pc),a1
  886.     bsr    strcpy
  887.     lea.l    crlf_mes(pc),a1
  888.     bsr    strcpy
  889.  
  890.     IOCS    _B_UP_S
  891.     moveq.l    #49,d1
  892.     IOCS    _B_RIGHT
  893.     lea.l    prt_buff(a6),a0
  894.     bsr    mesput
  895.     movem.l    (sp)+,d0-d1/a0-a1
  896.     rts
  897.  
  898. dec_set
  899.     move.l    a0,-(sp)
  900.     ext.l    d0
  901.     lea.l    dec_buf(a6),a0
  902.     bsr    bin2dec
  903.     bsr    zero_keshi
  904.     move.l    (sp)+,a0
  905.     lea.l    dec_buf(a6),a1
  906.     addq.l    #6,a1
  907.     bsr    strcpy
  908.     rts
  909.  
  910. *****************************************************************
  911. *    2進=>10進                        *
  912. *    d0 変換元の数値 a0 変換後の格納アドレス            *
  913. *****************************************************************
  914. bin2dec:
  915.     movem.l    d0-d3/a0-a1,-(sp)
  916.     moveq.l    #10-1,d1
  917.     lea.l    exp_tbl(pc),a1
  918. bin2dec0:
  919.     clr.b    d2
  920.     move.l    (a1)+,d3
  921. bin2dec1:
  922.     or    d3,d3
  923.     sub.l    d3,d0
  924.     bcs    bin2dec2
  925.     addq.b    #1,d2
  926.     bra    bin2dec1
  927. bin2dec2:
  928.     add.l    d3,d0
  929.     add.b    #'0',d2
  930.     move.b    d2,(a0)+
  931.     dbra    d1,bin2dec0
  932.     movem.l    (sp)+,d0-d3/a0-a1
  933.     rts
  934.  
  935. exp_tbl:
  936.     .dc.l    1000000000
  937.     .dc.l    100000000
  938.     .dc.l    10000000
  939.     .dc.l    1000000
  940.     .dc.l    100000
  941.     .dc.l    10000
  942.     .dc.l    1000
  943.     .dc.l    100
  944.     .dc.l    10
  945.     .dc.l    1
  946.  
  947. *****************************************************************
  948. *    ファイルサイズの頭にある'0'を消す            *
  949. *****************************************************************
  950. zero_keshi:
  951.     lea.l    dec_buf(a6),a0
  952.     moveq.l    #9-1,d0
  953. zero_keshi0:
  954.     cmp.b    #'0',(a0)
  955.     bne    zero_keshi9
  956.     move.b    #SPACE,(a0)+
  957.     dbra.w    d0,zero_keshi0
  958. zero_keshi9:
  959.     rts
  960.  
  961. *****************************************************************
  962. *    ファイルのOPENを行う                *
  963. *****************************************************************
  964. file_open:
  965.     move.w    #0,-(sp)        *ファイルopen
  966.     move.l    a0,-(sp)
  967.     DOS    _OPEN
  968.     addq.l    #6,sp
  969.     tst.l    d0
  970.     bmi    open_err
  971.     move.w    d0,in_file(a6)
  972.     rts
  973.  
  974. *****************************************************************
  975. *    ファイルのサイズを求める(d6に返す)            *
  976. *****************************************************************
  977. file_size:
  978.     move.w    #2,-(sp)
  979.     move.l    #0,-(sp)
  980.     move.w    in_file(a6),-(sp)
  981.     DOS    _SEEK
  982.     addq.l    #8,sp
  983.     tst.l    d0            *OK?
  984.     bmi    read_err
  985.  
  986.     move.l    d0,d6
  987.  
  988.     move.w    #0,-(sp)
  989.     move.l    #0,-(sp)
  990.     move.w    in_file(a6),-(sp)
  991.     DOS    _SEEK
  992.     addq.l    #8,sp
  993.     tst.l    d0            *OK?
  994.     bmi    read_err
  995.     rts
  996.  
  997. *****************************************************************
  998. *    ディスクからデータの読み込みを行う            *
  999. *****************************************************************
  1000. file_read:
  1001.     move.l    d6,-(sp)        *データサイズ
  1002.     move.l    a5,-(sp)        *バッファアドレス
  1003.     move.w    in_file(a6),-(sp)
  1004.     DOS    _READ
  1005.     lea    10(sp),sp
  1006.     tst.l    d0
  1007.     bmi    read_err
  1008.     cmp.l    d6,d0
  1009.     bne    read_err
  1010.     rts
  1011.  
  1012. *****************************************************************
  1013. *    ファイル作成                        *
  1014. *****************************************************************
  1015. file_create:
  1016.     move.w    #$20,-(sp)        *ファイルCREATE
  1017.     move.l    a0,-(sp)
  1018.     DOS    _CREATE
  1019.     addq.l    #6,sp
  1020.  
  1021.     tst.l    d0
  1022.     bmi    create_err
  1023.     move.w    d0,out_file(a6)
  1024.     rts
  1025.  
  1026. *****************************************************************
  1027. *    ディスクに書き込む                    *
  1028. *****************************************************************
  1029. file_write:
  1030.     move.l    d6,-(sp)        *データサイズ
  1031.     move.l    a5,-(sp)        *バッファアドレス
  1032.     move.w    out_file(a6),-(sp)
  1033.     DOS    _WRITE
  1034.     lea.l    10(sp),sp
  1035.     tst.l    d0
  1036.     bmi    write_err
  1037.     cmp.l    d6,d0
  1038.     bne    write_err
  1039.     rts
  1040.  
  1041. *****************************************************************
  1042. *    バッファ確保                        *
  1043. *****************************************************************
  1044. buf_get:
  1045.     pea.l    -1.w            *確保出来る最大サイズを取得
  1046.     DOS    _MALLOC
  1047.     addq.l    #4,sp
  1048.     andi.l    #$00ffffff,d0
  1049.     move.l    d0,d1
  1050.     move.l    d0,-(sp)
  1051.     DOS    _MALLOC
  1052.     addq.l    #4,sp
  1053.     tst.l    d0
  1054.     bmi    no_buff
  1055.  
  1056.     move.l    d0,buff_addr(a6)    *バッファアドレス
  1057.     move.l    d1,buff_size(a6)    *バッファサイズ
  1058.     rts
  1059.  
  1060. *****************************************************************
  1061. *    バッファ開放                        *
  1062. *****************************************************************
  1063. buf_free:
  1064.     pea.l    buff_addr(a6)        *バッファ開放
  1065.     DOS    _MFREE
  1066.     addq.l    #4,sp
  1067.     rts
  1068.  
  1069. *****************************************************************
  1070. *    処理したファイル数をチェックする            *
  1071. *****************************************************************
  1072. file_cnt_chk:
  1073.     tst.w    file_cnt(a6)        *処理したファイルは0個か
  1074.     bne    file_cnt_chk1        *違う
  1075.     lea.l    no_file_mes(pc),a0
  1076.     bsr    mesput
  1077. file_cnt_chk1:
  1078.     rts
  1079.  
  1080. *****************************************************************
  1081. *    ファイル名エラー                    *
  1082. *****************************************************************
  1083. name_er:
  1084.     lea.l    in_mes(pc),a0
  1085.     bsr    mesput
  1086.     lea.l    name_er_mes(pc),a0
  1087.     bsr    mesput
  1088.     bra    exit2
  1089.  
  1090. *****************************************************************
  1091. *    ファイルエラー                        *
  1092. *****************************************************************
  1093. file_er:
  1094.     move.w    in_file(pc),-(sp)    *ファイルCLOSE
  1095.     DOS    _CLOSE
  1096.     addq.l    #2,sp
  1097.  
  1098.     lea.l    arg1(a6),a0
  1099.     bsr    mesput
  1100.     lea.l    file_er_mes(pc),a0
  1101.     bsr    mesput
  1102.     bra    exit2
  1103.  
  1104. *****************************************************************
  1105. *    メモリが足りない                    *
  1106. *****************************************************************
  1107. no_buff:
  1108.     lea.l    arg1(a6),a0
  1109.     bsr    mesput
  1110.     lea.l    no_buff_mes(pc),a0
  1111.     bsr    mesput
  1112.     bra    exit2
  1113.  
  1114. *****************************************************************
  1115. *    ファイルが見付からない                    *
  1116. *****************************************************************
  1117. open_err:
  1118.     lea.l    arg1(a6),a0
  1119.     bsr    mesput
  1120.     lea.l    open_er_mes(pc),a0
  1121.     bsr    mesput
  1122.     bra    exit2
  1123.  
  1124. *****************************************************************
  1125. *    読み込みエラー                        *
  1126. *****************************************************************
  1127. read_err:
  1128.     lea.l    arg1(a6),a0
  1129.     bsr    mesput
  1130.     lea.l    read_er_mes(pc),a0
  1131.     bsr    mesput
  1132.     bra    exit2
  1133.  
  1134. *****************************************************************
  1135. *    出力パス名エラー                    *
  1136. *****************************************************************
  1137. out_name_err:
  1138.     lea.l    out_mes(pc),a0
  1139.     bsr    mesput
  1140.     lea.l    name_er_mes(pc),a0
  1141.     bsr    mesput
  1142.     bra    exit2
  1143.  
  1144. *****************************************************************
  1145. *    ファイル作成エラー                    *
  1146. *****************************************************************
  1147. create_err:
  1148.     lea.l    arg2(a6),a0
  1149.     bsr    mesput
  1150.     lea.l    create_er_mes(pc),a0
  1151.     bsr    mesput
  1152.     bra    exit2
  1153.  
  1154. *****************************************************************
  1155. *    ファイル作成エラー                    *
  1156. *****************************************************************
  1157. ipr_err:
  1158.     lea.l    ipr_er_mes(pc),a0
  1159.     bsr    mesput
  1160.     bra    exit2
  1161.  
  1162. *****************************************************************
  1163. *    ファイル書き込みエラー                    *
  1164. *****************************************************************
  1165. write_err:
  1166.     lea.l    arg2(a6),a0
  1167.     bsr    mesput
  1168.     lea.l    write_er_mes(pc),a0
  1169.     bsr    mesput
  1170.     bra    exit2
  1171.  
  1172. *****************************************************************
  1173. *    使用方表示                        *
  1174. *****************************************************************
  1175. usage:
  1176.     lea.l    usage_mes(pc),a0
  1177.     bsr    mesput
  1178.     bra    exit2
  1179.  
  1180. *****************************************************************
  1181. *    メッセージ表示                        *
  1182. *****************************************************************
  1183. mesput:
  1184. *    move.w    #STDERR,-(sp)        *標準エラー出力へ
  1185.     move.w    #STDOUT,-(sp)        *標準出力へ
  1186.     move.l    a0,-(sp)        *メッセージを
  1187.     DOS    _FPUTS            *出力する
  1188.     addq.l    #6,sp            *スタック補正
  1189.     rts
  1190.  
  1191. *****************************************************************
  1192. *    終了処理                        *
  1193. *****************************************************************
  1194. exit:
  1195.     IOCS    _MS_INIT        *キーバッファクリア
  1196.     moveq.l    #-1,d1
  1197.     IOCS    _SKEY_MOD
  1198.     move.w    #-1,-(sp)
  1199.     DOS    _KFLUSH
  1200.     addq.l    #2,sp
  1201.     rts
  1202.  
  1203. *****************************************************************
  1204. *    エラー処理2                        *
  1205. *****************************************************************
  1206. exit2:
  1207.     bsr    exit
  1208.     move.w    #1,-(sp)        *終了コード1を持って
  1209.     DOS    _EXIT2            * エラー終了
  1210.  
  1211. *****************************************************************
  1212. *    データエリア                        *
  1213. *****************************************************************
  1214.     .data
  1215.     .even
  1216. usage_mes:
  1217.     .dc.b    'RGB to BMP converter V0.01 by A.MUKAWA',CR,LF
  1218.     .dc.b    '機能:24bitベタのRGBファイルを フルカラーBMPファイルにコンバートします',CR,LF
  1219.     .dc.b    '用法:RGB2BMP [スイッチ] ファイル名 [セーブ先パス]',CR,LF
  1220.     .dc.b    CR,LF
  1221.     .dc.b    '               /M    マチエールフィルタ(謎)をかける',CR,LF
  1222.     .dc.b    0
  1223.  
  1224. in_mes:
  1225.     .dc.b    '入力ファイル',0
  1226. out_mes:
  1227.     .dc.b    '出力先パス',0
  1228. name_er_mes:
  1229.     .dc.b    '名の指定に間違いがあります!',CR,LF,0
  1230. file_er_mes:
  1231.     .dc.b    ' はファイルが壊れているか、RGBファイルではないようです!',CR,LF,0
  1232. open_er_mes:
  1233.     .dc.b    ' が見つかりません!',CR,LF,0
  1234. read_er_mes:
  1235.     .dc.b    ' の読み込みエラーが発生しました!',CR,LF,0
  1236. ipr_er_mes:
  1237.     .dc.b    'IPRファイルがありません!',CR,LF,0
  1238. no_buff_mes:
  1239.     .dc.b    ' の変換に必要なメモリがありません!',CR,LF,0
  1240. create_er_mes:
  1241.     .dc.b    ' が作れません!',CR,LF,0
  1242. write_er_mes:
  1243.     .dc.b    ' の書き込みエラーが発生しました!',CR,LF,0
  1244. no_file_mes:
  1245.     .dc.b    '変換できるファイルがありませんでした!',CR,LF,0
  1246. henkan_mes:
  1247.     .dc.b    ' 変換中',0
  1248. syuryo_mes:
  1249.     .dc.b    ' 終了!',0
  1250. crlf_mes:
  1251.     .dc.b    CR,LF,0
  1252. func_off_mes:
  1253.     .dc.b    $1b,$5b,$3e,$31,$68,0
  1254. sla_mes:
  1255.     .dc.b    '/',0
  1256.  
  1257. dext:
  1258.     .dc.b    '.RGB',0        *補う拡張子
  1259. komekome:
  1260.     .dc.b    '\'
  1261. kome0:
  1262.     .dc.b    '*.RGB',0
  1263. cext1:
  1264.     .dc.b    '.IPR',0        *変更する拡張子1
  1265. cext2:
  1266.     .dc.b    '.BMP',0        *変更する拡張子2
  1267.     .even
  1268.  
  1269. size_table:
  1270.     .dc.l    49152            *S128_128:
  1271.     .dc.w    128,128
  1272.  
  1273.     .dc.l    196608            *S256_256:
  1274.     .dc.w    256,256
  1275.  
  1276.     .dc.l    345600            *S480_240:
  1277.     .dc.w    480,240
  1278.  
  1279.     .dc.l    691200            *S480_480:
  1280.     .dc.w    480,480
  1281.  
  1282.     .dc.l    786432            *S512_512:
  1283.     .dc.w    512,512
  1284.  
  1285.     .dc.l    768000            *S640_400:
  1286.     .dc.w    640,400
  1287.  
  1288.     .dc.l    921600            *S640_480:
  1289.     .dc.w    640,480
  1290.  
  1291.     .dc.l    1179648            *S768_512:
  1292.     .dc.w    768,512
  1293.  
  1294.     .dc.l    1228800            *S640_640:
  1295.     .dc.w    640,640
  1296.  
  1297.     .dc.l    2359296            *S1024_768:
  1298.     .dc.w    1024,768
  1299.  
  1300.     .dc.l    3145728            *S1024_1024:
  1301.     .dc.w    1024,1024
  1302.  
  1303.     .dc.l    3072000            *S1280_800:
  1304.     .dc.w    1280,800
  1305.  
  1306.     .dc.l    3686400            *S1280_960:
  1307.     .dc.w    1280,960
  1308.  
  1309.     .dc.l    3932160            *S1280_1024:
  1310.     .dc.w    1280,1024
  1311.  
  1312.     .dc.l    0            *S_OTHER:
  1313.     .dc.w    0,0
  1314.  
  1315. *****************************************************************
  1316. *    ワークエリア                        *
  1317. *****************************************************************
  1318.  
  1319.     .offset    0
  1320. filbuf:
  1321.     .ds.b    53            *ファイル情報格納バッファ
  1322. nambuf:
  1323.     .ds.b    92            *ファイル名展開用バッファ
  1324. arg1:
  1325.     .ds.b    256            *入力ファイル名バッファ
  1326. arg2:
  1327.     .ds.b    256            *出力ファイル名バッファ
  1328. arg3:
  1329.     .ds.b    256            *IPRファイル名バッファ
  1330. cpathbuf
  1331.     .ds.b    65            *カレントパス名バッファ
  1332. spathbuf
  1333.     .ds.b    65            *セーブ先パス名バッファ
  1334.     .even
  1335. head_buff:
  1336.     .ds.b    54            *BMPヘッダバッファ
  1337. buff_addr:
  1338.     .ds.l    1            *画像読み込みバッファアドレス
  1339. buff_size:
  1340.     .ds.l    1            *画像読み込みバッファサイズ
  1341. gr_addr:
  1342.     .ds.l    1            *画像データアドレス
  1343. fi_size:
  1344.     .ds.l    1            *ファイルサイズ
  1345. yoko:
  1346.     .ds.w    1            *画像の横(X)サイズ
  1347. tate:
  1348.     .ds.w    1            *画像の縦(Y)サイズ
  1349. line_byte1:
  1350.     .ds.w    1            *1ラインのバイト数(読み込み側)
  1351. line_byte2:
  1352.     .ds.w    1            *1ラインのバイト数(書き込み側)
  1353. line_cnt:
  1354.     .ds.w    1
  1355. file_cnt:
  1356.     .ds.w    1
  1357. nameichi:
  1358.     .ds.l    1
  1359. in_file:
  1360.     .ds.w    1
  1361. out_file:
  1362.     .ds.w    1
  1363. dec_buf:
  1364.     .ds.b    10+1
  1365. prt_buff:
  1366.     .ds.b    96+1
  1367. sflg:
  1368.     .ds.b    1
  1369. ipr_flg:
  1370.     .ds.b    1
  1371.     .even
  1372. WORK_SIZE:
  1373.  
  1374.     .bss
  1375.     .even
  1376. work:
  1377.     .ds.b    WORK_SIZE
  1378. my_stack:
  1379.     .ds.l    1024
  1380. mysp:
  1381.     .end    start
  1382.